/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ventas.beans;

import entities.MultiplicadorProductoPedido;
import entities.Pedido;
import entities.Producto;
import entities.Usuario;
import facades.MultiplicadorProductoPedidoFacade;
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
import javax.enterprise.event.Observes;
import javax.inject.Inject;
import org.apache.commons.collections.map.MultiKeyMap;
import qualifiers.EventoEntidadCreada;
import qualifiers.EventoEntidadElegida;
import qualifiers.UsuarioLogeado;
import qualifiers.resources.MultiplicadoresCategoriasYSexosMap;
import qualifiers.resources.MultplicadoresProductosYPedidosMap;

/**
 *
 * @author damfercer
 */
@Named(value = "multiplicadoresProductoYPedidoBean")
@SessionScoped
public class MultiplicadoresProductoYPedidoBean implements Serializable{
    @Inject
    @MultplicadoresProductosYPedidosMap
    private MultiKeyMap mapProductosYPedidos;
    @Inject
    @MultiplicadoresCategoriasYSexosMap
    private MultiKeyMap mapCategoriasYSexos;
    @Inject
    @UsuarioLogeado
    private Usuario usuario;
    @Inject
    private MultiplicadorProductoPedidoFacade multiplicadoresFacade;
    private Pedido pedido;
    private Map<Integer, MultiplicadorProductoPedido> multiplicadores;
    @Inject
    private MultiplicadoresBean multiplicadoresBean;
    /**
     * Creates a new instance of MultiplicadoresProductoYPedidoBean
     */
    public MultiplicadoresProductoYPedidoBean() {
    }
    
    public void onPedidoElegido(@Observes @EventoEntidadElegida Pedido p){
        this.setPedido(p);
        this.multiplicadores=new HashMap<Integer, MultiplicadorProductoPedido>();
    }
    
    public void onNuevoPedido(@Observes @EventoEntidadCreada Pedido p){
        this.setPedido(p);
        this.multiplicadores=new HashMap<Integer, MultiplicadorProductoPedido>();
    }

    /**
     * @return the pedido
     */
    public Pedido getPedido() {
        return pedido;
    }

    /**
     * @param pedido the pedido to set
     */
    public void setPedido(Pedido pedido) {
        this.pedido = pedido;
    }
    
    public MultiplicadorProductoPedido recuperarMultiplicadorEdicion(Producto p){
        if(!multiplicadores.containsKey(p.getIdProducto())){
            MultiplicadorProductoPedido m=recuperarMultiplicadorProductoPedidoDeProductoYPedido(p, pedido);
            if(m==null){
                MultiplicadorProductoPedido multiplicador=new MultiplicadorProductoPedido();
                multiplicador.setPedido(pedido);
                multiplicador.setProducto(p);
                multiplicador.setMultiplicador(pedido.getCliente().getMultiplicador());
                multiplicadores.put(p.getIdProducto(), multiplicador);
            }
            else{
                multiplicadores.put(p.getIdProducto(), m);
            }
            
        }
        return multiplicadores.get(p.getIdProducto());
    }
    
    
    private MultiplicadorProductoPedido recuperarMultiplicadorProductoPedidoDeProductoYPedido(Producto producto, Pedido pedido){
        MultiplicadorProductoPedido multiplicador=null;
        if(mapProductosYPedidos.containsKey(producto.getIdProducto(), pedido.getIdPedido())){
            multiplicador=(MultiplicadorProductoPedido)mapProductosYPedidos.get(producto.getIdProducto(), pedido.getIdPedido());
        }
        else if(mapCategoriasYSexos.containsKey(producto.getC().getIdC(), producto.getSexo().getIdSexo())){
            multiplicador=(MultiplicadorProductoPedido)mapCategoriasYSexos.get(producto.getC().getIdC(), producto.getSexo().getIdSexo());
        }
        return multiplicador;
    }
    
    public void editarMultiplicador(Producto p){
        MultiplicadorProductoPedido multiplicador=multiplicadores.get(p.getIdProducto());
        if(multiplicador!=null){
            multiplicador.setUsuarioCreador(usuario);
            multiplicador.setFechaCreacion(new Date());
            multiplicadoresBean.modificarMultiplicadorPedidoYProducto(multiplicador);
        }
    }
    
    public void nada(){
        
    }
}
